package com.fufu.thread;

/**
 * 线程的生命周期
 * @author: 黑虎阿福
 * @date: 2023/2/10 11:47
 * @contact: hsf6661@163.com
 */
public class ThreadLifeCycle extends Thread {

    public static void main(String[] args) {
        /*
          New：新创建的线程，尚未执行；
          Runnable：运行中的线程，正在执行run()方法的Java代码；
          Blocked：运行中的线程，因为某些操作被阻塞而挂起；
          Waiting：运行中的线程，因为某些操作在等待中；
          Timed Waiting：运行中的线程，因为执行sleep()方法正在计时等待；
          Terminated：线程已终止，因为run()方法执行完毕。
        */
        ThreadLifeCycle thread = new ThreadLifeCycle();
        //1.NEW 新建线程
        System.out.println(thread.getName()+":"+thread.getState());
        //2.就绪 启动线程进入就绪状态，若此时获取到cpu资源，就会立即开始执行，否则，需要在就绪队列中等待cpu的调度
        thread.start();
        thread.setPriority(8);

        for (int i = 0; i < 10; i++) {
            System.out.println(thread.getName()+"in main--->:"+thread.getState());
        }

        try {
            //阻塞主线程，便于获取thread线程的状态
            Thread.sleep(30);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //5.当run()方法执行完、线程抛出异常、调用线程的stop()方法，线程销毁
        System.out.println(thread.getName()+"in main--->:"+thread.getState());
    }

    @Override
    public void run(){
        //3.Runnable 运行状态，当线程获取到cpu的调度，就会立即开始执行run()方法
        System.out.println(this.getName()+"in run--->:"+this.getState());

        try {
            //4.阻塞 在运行状态的时候，可能因为某些原因导致运行状态的线程变成了阻塞状态
            //线程会在Blocked Waiting Timed Waiting之间变化
            Thread.sleep(20);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
